package com.xziying.appstore.api;

import java.util.List;

/**
 * ApiInteractive API列表
 *
 * @author : xziying
 * @create : 2021-03-20 14:44
 */
public interface ApiInteractive {


    /**
     * 取得好友列表，返回内容#换行符分割
     * @param fromQQ 机器人QQ
     */
    List<String> getFriendList(String fromQQ);

    /**
     * 取群列表
     */
    List<String> getGroupList(String fromQQ);

    /**
     * 取群成员列表
     */
    List<String> getTheListOfGroupMembers(String fromQQ, String groupNumber);

    /**
     * 取QQ群名
     * @param fromQQ 机器人QQ
     * @param group 群号
     */
    String getGroupName(String fromQQ, String group);

    /**
     * 发送普通消息
     * @param fromQQ 机器人QQ
     * @param type  0在线临时会话 1好友 2群 3讨论组 4群临时会话 5讨论组临时会话 7好友验证回复会话 8群匿名消息
     * @param beau 发送群匿名消息、群信息、讨论组、群或讨论组临时会话信息时填写，如发送对象为好友或信息类型是0时可空
     * @param qq 收信对象QQ
     * @param msg 信息内容
     */
    void sendMsg(String fromQQ, int type, String beau, String qq, String msg);

    /**
     * 发送XML消息
     * @param fromQQ 机器人QQ
     * @param method 1普通 2匿名（匿名需要群开启）
     * @param type 0在线临时会话 1好友 2群 3讨论组 4群临时会话 5讨论组临时会话 7好友验证回复会话
     * @param beau 发送群信息、讨论组、群或讨论组临时会话信息时填写，如发送对象为好友或信息类型是0时可空
     * @param qq 收信对象QQ
     * @param msg XML代码或Json代码
     * @param subtype 0基本 2点歌
     */
    void sendXml(String fromQQ,int method, int type, String beau, String qq, String msg, int subtype);

    /**
     * 取得机器人网页操作用的Cookies
     * @param fromQQ 机器人QQ
     * @return Cookies
     */
    String getCookies(String fromQQ);

    /**
     * 邀请对象入群，频率过快会失败
     * @param fromQQ 机器人QQ
     * @param type 0 管理员邀请 1非管理员邀请
     * @param group 被邀请加入的群号
     * @param qq 被邀请人QQ号码（多个号码使用 #换行符(\r\n) 分割）
     */
    void inviteGroup(String fromQQ, int type,String group, String qq);


    /**
     * 取对象昵称
     * @param fromQQ 机器人QQ
     * @param qq 欲取得的QQ的号码
     */
    String getNick(String fromQQ, String qq);

    /**
     * 取对象群名片
     * @param fromQQ 机器人Q
     * @param group 群号
     * @param qq 欲取得群名片的QQ号码
     */
    String getGroupCard(String fromQQ, String group, String qq);

    /**
     * 取对象QQ等级 成功返回等级  失败返回-1
     * @param fromQQ 机器人QQ
     * @param qq 欲取得的QQ的号码
     */
    int getObjLevel(String fromQQ, String qq);


    /**
     * 查询对象或自己是否被禁言  禁言返回真 失败或未禁言返回假
     * @param fromQQ 机器人QQ
     * @param group 欲查询的群号
     * @param qq 需要查询的对象QQ
     */
    boolean isShutUp(String fromQQ, String group, String qq);

    /**
     * 群内禁言某人
     * @param fromQQ 机器人QQ
     * @param group 欲操作的群号
     * @param qq 欲禁言的对象，如留空且机器人QQ为管理员，将设置该群为全群禁言
     * @param time 0为解除禁言 （禁言单位为秒），如为全群禁言，参数为非0，解除全群禁言为0
     */
    void shutUP(String fromQQ, String group, String qq, String time);

    /**
     * 申请加群
     * @param fromQQ 机器人QQ
     * @param group 欲申请加入的群号
     * @param reason 附加理由，可留空（需回答正确问题时，请填写问题答案
     */
    void joinGroup(String fromQQ, String group, String reason);


    /**
     * 退群
     * @param fromQQ 机器人QQ
     * @param group 欲退出的群号
     */
    void quitGroup(String fromQQ, String group);


    /**
     * 上传图片，可使用网页链接或本地读入，成功返回该图片GUID，失败返回空
     * @param fromQQ 机器人QQ
     * @param type 1好友、临时会话  2群、讨论组 Ps：好友临时会话用类型 1，群讨论组用类型 2；当填写错误时，图片GUID发送不会成功
     * @param target 上传该图片所属的群号或QQ
     * @param url 图片数据
     */
    void upLoadPic(String fromQQ, int type, String target, String url);

    /**
     * 根据图片GUID取得图片下载连接
     * @param fromQQ 机器人QQ
     * @param type 1 群 讨论组  2临时会话和好友
     * @param target 图片所属对应的群号和好友QQ（可随意乱填写）
     * @param GUID 例如[ER:pic={xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}.jpg]
     */
    String getPicLink(String fromQQ, int type, String target, String GUID);


    /**
     * 发布群公告（成功返回真，失败返回假），调用此API应保证响应QQ为管理员
     * @param fromQQ 机器人QQ
     * @param group 欲发布公告的群号
     * @param title 公告标题
     * @param msg 公告内容
     */
    boolean PBGroupNotic(String fromQQ, String group, String title, String msg);

    /**
     * 取群公告，返回该群最新公告
     * @param fromQQ 机器人QQ
     * @param group 欲取得公告的群号
     */
    String getNotice(String fromQQ, String group);


    /**
     * 向好友发起窗口抖动，调用此Api腾讯会限制频率
     * @param fromQQ 机器人QQ
     * @param qq 接收抖动消息的QQ
     */
    void shakeWindow(String fromQQ, String qq);

    /**
     * 某人请求添加好友验证处理
     * @param fromQQ 机器人QQ
     * @param qq 请求添加好友人QQ
     * @param method 10同意 20拒绝 30忽略
     * @param msg 拒绝添加好友 附加信息
     */
    void handleFriendEvent(String fromQQ, String qq, int method, String msg);

    /**
     * 某人请求入群 被邀请入群 等 群验证处理
     * @param fromQQ 机器人QQ
     * @param type 213请求入群  214我被邀请加入某群  215某人被邀请加入群
     * @param qq 申请入群、被邀请人的QQ （当请求类型为214时这里为邀请人QQ）
     * @param group 收到请求群号
     * @param seq 收需要处理事件的seq ，这个参数在收到群事件时，ER_原始信息会传递
     * @param method 10同意 20拒绝 30忽略
     * @param msg 拒绝入群附加信息
     */
    void handleGroupEvent(String fromQQ, int type, String qq, String group, String seq, int method, String msg);

    /**
     * 修改对象群名片 成功返回真 失败返回假
     * @param fromQQ 机器人QQ
     * @param group 对象所处群号
     * @param qq 被修改名片人QQ
     * @param card 需要修改的名片
     */
    boolean setGroupCard(String fromQQ, String group, String qq, String card);

    /**
     * 将对象移除群
     * @param fromQQ 机器人QQ
     * @param group 被执行群号
     * @param qq 被执行对象
     * @param noLongerAccept 真为不再接收，假为接收
     */
    void kickGroupMBR(String fromQQ, String group, String qq, boolean noLongerAccept);

    /**
     * 获取对象资料 此方式为http，调用时应自行注意控制频率（成功返回JSON格式自行解析）
     * @param fromQQ 响应QQ
     * @param qq 对象QQ
     */
    String getObjInfo(String fromQQ, String qq);

    /**
     * 删除好友 成功返回真 失败返回假
     * @param fromQQ 机器人QQ
     * @param qq 被删除对象
     */
    boolean delFriend(String fromQQ, String qq);

    /**
     * 消息撤回（成功返回空，失败返回腾讯给出的理由）（Pro版可用）
     * @param fromQQ 机器人QQ
     * @param group 需撤回消息群号
     * @param serial 需撤回消息序号
     * @param id 需撤回消息ID
     */
    String withdrawMsg(String fromQQ, String group, String serial, String id);

    /**
     * 取框架所有QQ号 换行符分割
     * @param type 0取所有 1取在线 2取离线
     */
    String getQQList(int type);


    /**
     * 加好友,易频繁,有问题验证无法添加
     * @param fromQQ 机器人QQ
     * @param qq qq
     * @param msg 验证信息
     */
    boolean addFriend(String fromQQ, String qq, String msg);



    /**
     * 向日志窗口发送一条本插件的日志
     * @param msg 任意想输出的文本格式信息
     */
    void outPutLog(String msg);


}
